package com.study.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Scala15_RDD_Operator_Transform{
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    conf.set("spark.local.dir","D:\\hadoopbook\\spark\\test")
    val sc = new SparkContext(conf)
    // TODO 算子 - 转换 -  K-V类型:groupByKey
    val rdd: RDD[(String, Int)] = sc.makeRDD(
      List(
        ("a", 2),
        ("a", 3),
        ("a", 4)
      )
    )
    val value: RDD[(String, Iterable[(String, Int)])] = rdd.groupBy(_._1)
    // groupBy和groupByKey
    // 1.groupBy不需要考虑数据类型，groupByKey必须保证数据KV一致
    // 2.groupBy按照指定规则进行分组，groupByKey按照K对V进行分组
    // 3.返回值类型
    //      groupBy返回值类型：RDD[(String, Iterable[(String, Int)])]
    //      groupByKey返回值类型：RDD[(String, Iterable[Int])]

    // groupByKey算子将相同key的value放到同一个组
    // groupByKey也可以实现WordCount 3
    val rdd1: RDD[(String, Iterable[Int])] = rdd.groupByKey()
    val rdd2 = rdd1.mapValues(_.sum)
    rdd2.collect().foreach(println)//(a,9)

    sc.stop()

  }

}
